package com.example.demo.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.entity.Achieve;
import com.example.demo.entity.User;
import com.example.demo.entity.vo.AchieveVo;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
* <p>
*  服务类
* </p>
*
* @author cy
* @since 2020-08-01
*/
public interface AchieveService {

    /**
    * 分页查询Achieve
    *
    * @param page     当前页数
    * @param pageSize 页的大小
    * @return 返回mybatis-plus的Page对象,其中records字段为符合条件的查询结果
    * @author cy
    * @since 2020-08-01
    */
    Page<AchieveVo> listAchievesByPage(int page, int pageSize, Integer userId ,String  achieveName,Integer  state,String  achieveType,String achieveIndustry);

    /**
    * 根据id查询Achieve
    *
    * @param id 需要查询的Achieve的id
    * @return 返回对应id的Achieve对象
    * @author cy
    * @since 2020-08-01
    */
    AchieveVo getAchieveById(int id);

    /**
     * 根据id查询Achieve
     *
     * @param id 需要查询的Achieve的id
     * @return 返回对应id的Achieve对象
     * @author cy
     * @since 2020-08-01
     */
    Achieve getJustAchieveById(int id);

    /**
     * 根据achieveName,achieveLeader查询Achieve
     *
     */
    Achieve getAchieveByAchieveNameAndAchieveLeader(String achieveName,String achieveLeader);

    /**
     * 管理员通过审核成果
     *
     * @param id 需要查询的Achieve的id
     * @return 返回审核成功之后Achieve对象的id
     * @author cy
     * @since 2020-08-01
     */
    int checkAchieve(Achieve achieve);

    /**
    * 插入Achieve
    *
    * @param achieve 需要插入的Achieve对象
    * @return 返回插入成功之后Achieve对象的id
    * @author cy
    * @since 2020-08-01
    */
    int insertAchieve(Achieve achieve);

    /**
    * 根据id删除Achieve
    *
    * @param id 需要删除的Achieve对象的id
    * @return 返回被删除的Achieve对象的id
    * @author cy
    * @since 2020-08-01
    */
    int deleteAchieveById(int id,int userId);

    /**
    * 根据id更新Achieve
    *
    * @param achieve 需要更新的Achieve对象
    * @return 返回被更新的Achieve对象的id
    * @author cy
    * @since 2020-08-01
    */
    int updateAchieve(Achieve achieve);

    /**
     * 文件导入
     * @param fileName
     * @param file
     * @return
     */
    int importAchieve(String fileName, MultipartFile file, User user) throws IOException;

    /**
     * 查询管理员未审核的成果数量
     * @return
     */
    int UncheckedNum();
}
